/**
 * 
 */
package edu.uoc.tdp.pac3.server;

import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Vector;



import edu.uoc.tdp.pac3.*;
import edu.uoc.tdp.pac3.common.Empleat;



/**
 * Classe que gestiona les dades persistents de Empleat
 */
public class GestorDiscEmpleat {
	/** Objecte connexio */
	private Connection connexio;
	/** Objecte gestor connexio disc */
	private GestorConnexioDisc gcd;
		
	public GestorDiscEmpleat(GestorConnexioDisc pGcd){
		gcd = pGcd;
		connexio = pGcd.getConexion();
	}
	
	/**
	 * Metode per a introduir un empleat a la base de dades a partir d'un objecte Empleat
	 * {pre: L'empleat no existeix a la base de dades.
	 * 	Hi ha connexio a la base de dades i les dades venen en format correcte
	 * {post: S'ha introduit un empleat a la base de dades
	 * @param pIdEmpleat representa l'identificador de l'empleat
	 * @param pCifEmpresa representa el CIF de l'empresa
	 * @param pNom representa el nom de l'empleat
	 * @param pCognoms representa els cognoms de l'empleat
	 * @param pDataAlta representa la data d'alta de l'empleat
	 * @throws SQLException - excepcio de la manipulacio de la base de dades
	 * @throws Exception - escepcio general
	 */
	public void introduirEmpleat (Empleat emple) throws SQLException, Exception {
		Statement sentencia = gcd.crearSentencia(); //Crea la sentencia
		connexio.setAutoCommit(false); //Transaccions manuals, o fem tots els canvis o cap
		SimpleDateFormat formatador = new SimpleDateFormat("dd-MM-yyyy");
		String insercioEmpleat ="INSERT INTO empleat_extern (id_empleat, cif_empresa," +
				"nom, cognoms, data_alta) VALUES(" +
				emple.getIdEmpleat() + "," +
				"'" + emple.getCifEmpresa() + "'" + "," +
				"'" + emple.getNom() + "'" + "," +
				"'" + emple.getCognom() + "'" +"," +
				"'" + formatador.format(emple.getDataAlta()) + "'" + ")";
		sentencia.executeUpdate(insercioEmpleat);
		connexio.commit(); //Confirma els canvis
		connexio.setAutoCommit(true); //Retorna el sistema al commit automatic
		sentencia.close(); //Tanca la sentencia abans de sortir
	}
	
	/**
	 * Metode que recupera la llista d'empleats de la base de dades
	 * @throws SQLException - excepcio de la manipulacio de la base de dades
	 * @throws Exception - escepcio general
	 */
	public Vector<Empleat> obtenirEmpleats() throws SQLException, Exception{

		Vector<Empleat> v = null;
		
		Statement sentencia = gcd.crearSentencia(); 
		connexio.setAutoCommit(false);
		String consulta =("SELECT * FROM empleat_extern");
			
		ResultSet rs = sentencia.executeQuery(consulta);
		if (rs != null){
			v = new Vector<Empleat>();
			while (rs.next()){
				int id_Empleat = rs.getInt(1);
				String cif_Empresa = rs.getString(2);
				String nom = rs.getString(3);
				String cognom = rs.getString(4);
				Date data_Alta = rs.getDate(5);
				Empleat empleat = new Empleat(id_Empleat, cif_Empresa, nom, cognom, data_Alta);
				v.add(empleat);
			}
		}
		connexio.commit();
		connexio.setAutoCommit(true);
		sentencia.close();
			
		return v;
	
	}
}